home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 05 - 1989 / 05.01 Jan 89 / LightTrace / test_LightTrace.p < prev    next >
Encoding:
Text File  |  1988-09-15  |  1.4 KB  |  81 lines  |  [TEXT/PJMM]

  1. program test_Litetrace;
  2.     uses
  3.         LightTrace;
  4.  
  5.     var
  6.         i, j: integer;
  7.  
  8.  
  9.     procedure Decompose (Num: integer); { factor Num, report smallest factors first }
  10.         var
  11.             i, factor: integer;
  12.  
  13.         function check (factor: integer): BOOLEAN;
  14.         begin
  15.             if (Num div factor) * factor = Num then
  16.                 check := true
  17.             else
  18.                 check := false;
  19.         end;
  20.  
  21.     begin
  22.         write(IntOf(Num), '=1');
  23.         while check(2) and (Num > 1) do
  24.             begin
  25.                 write('*2');
  26.                 Num := Num div 2;
  27.             end;
  28.         factor := 3;
  29.         while (Num > 1) do
  30.             begin
  31.                 while check(factor) and (Num > 1) do
  32.                     begin
  33.                         write('*', IntOf(factor));
  34.                         Num := Num div factor;
  35.                     end;
  36.                 factor := factor + 2;
  37.             end;
  38.         writeln;
  39.     end;
  40.  
  41.     procedure Reduce (var numerator, denominator: INTEGER);        {reduces fraction to lowest terms}
  42.         var
  43.             commonDivisor: INTEGER;
  44.  
  45.         function GCD (m, n: INTEGER): INTEGER;
  46.             var
  47.                 r: INTEGER;
  48.         begin
  49.             writeComment(concat('GCD ', IntOf(m), ' ', IntOf(n)));
  50.             r := m mod n;
  51.             if r = 0 then
  52.                 GCD := n
  53.             else
  54.                 GCD := GCD(n, r)
  55.         end;{ funct GCD }
  56.  
  57.     begin { proc reduce }
  58.         commonDivisor := GCD(numerator, denominator);
  59.         numerator := numerator div commonDivisor;
  60.         denominator := denominator div commonDivisor;
  61.     end; { proc reduce }
  62.  
  63.  
  64.  
  65. begin
  66.     showtext;
  67.     InitTracing;
  68.  
  69.     StartTracing(false, true, true);
  70.  
  71.     decompose(1 * 2 * 3 * 4 * 5);
  72.  
  73.     i := 1 * 2 * 3 * 4 * 5;
  74.     j := 6 * 7 * 8 * 9;
  75.     write(IntOf(i), '/', IntOf(j), '=');
  76.     reduce(i, j);
  77.     writeln(IntOf(i), '/', IntOf(j));
  78.  
  79.     EndTracing;
  80.  
  81. end.